// axios的基础封装
import axios from "axios";
import { useAdminStore } from "@/stores/AdminStore";
import router from "@/router";

const javaInstance = axios.create({
  baseURL: 'http://localhost:6060',
  // baseURL: 'https://36.158.228.122:22969',
  timeout: 5000,
});

const flaskInstance = axios.create({
  baseURL: 'http://localhost:7999',
  timeout: 5000,
});

// 定义一个数组，包含所有不需要拦截的路径
const noInterceptPaths = [
  '/admin/login',
  '/admin/register',
  '/admin/token',
  '/admin/avatarUpload',
  "/admin/getPreView",
  '/',
  'http://127.0.0.1:6999/change/getHtml',
  '/wordCloud',
  '/wordCloudTitle'
];

// 为两个实例添加请求拦截器
const addRequestInterceptor = (instance) => {
  instance.interceptors.request.use((config) => {
    // 如果在不需要拦截的路径中，直接返回配置
    if (noInterceptPaths.some(path => config.url === path)) {
      console.log(`请求 ${config.url} 不需要拦截。`);
      return config;
    }
    // 添加 token 到请求头
    config.headers['token'] = useAdminStore().getTokenInfo();
    console.log(`请求 ${config.url} 被拦截，已添加 token。`);
    return config;
  }, error => {
    console.error(`请求 ${error.config.url} 发生错误：`, error);
    return Promise.reject(error);
  });
};

// 为两个实例添加响应拦截器
const addResponseInterceptor = (instance) => {
  instance.interceptors.response.use((response) => {
    console.log(`从 ${response.config.url} 收到响应，状态码 ${response.status}。`);
    return response.data;
  }, error => {
    // 错误处理逻辑
    console.error(`从 ${error.config.url} 收到错误响应：`, error);
    if (error.response) {
      console.error(`响应状态码：${error.response.status}`);
      // token过期
      if (error.response.status === 401) {
        useAdminStore().reset();
        ElMessage.error('登录过期，请重新登录');
        router.push('/login');
      }
    } else if (error.request) {
      console.error(`请求已发出，但未收到响应：`, error.request);
    } else {
      console.error(`设置请求时发生错误：`, error.message);
    }
    return Promise.reject(error);
  });
};

// 添加拦截器
addRequestInterceptor(javaInstance);
addResponseInterceptor(javaInstance);
addRequestInterceptor(flaskInstance);
addResponseInterceptor(flaskInstance);

// 导出两个实例
export { flaskInstance, javaInstance };